﻿//文档就绪函数
$(function () {
    //反填
    reverseFill()

    ////领料信息
    //ShowMaterialRequisitionInformation()

    ////报工信息
    //ShowReporting()

    ////质检记录
    //ShowQualityInspectionRecords()

    ////原料调拨
    //ShowRawMaterialAllocation()

    //班组
    selectTeamsAndGroups()

    //工艺路线
    $("#ProcessRouteName").val("工艺线路一");
    $("#ProductionProcessesNumber").val("CY2411453523")
    $("#ProductionProcessesName").val("喷漆")

});

//渲染工艺路线
layui.use(function () {
    var steps = [
        { name: "喷漆", index: 1 },
        { name: "清洗", index: 2 },
        { name: "包装", index: 3 }
    ];

    var stepContainer = document.querySelector('.step-container');

    steps.forEach(function (step, index) {
        var stepDiv = document.createElement('div');
        stepDiv.className = "step";

        var icon = document.createElement('i');
        icon.className = "layui-icon layui-icon-success";
        icon.style.fontSize = "30px";
        icon.style.color = "#1E9FFF";
        stepDiv.appendChild(icon);

        var stepName = document.createElement('span');
        stepName.textContent = step.name;
        stepDiv.appendChild(stepName);

        if (step.index) {
            var stepNumber = document.createElement('span');
            stepNumber.className = "step-number";
            stepDiv.appendChild(stepNumber);
        }

        if (index < steps.length - 1) {
            var line = document.createElement('div');
            line.className = "step-line";
            stepContainer.appendChild(line);
        }

        stepContainer.appendChild(stepDiv);
    });
});

const GetprocessTasksId = getPathIdFromUrl(); // 假设你定义了这个函数
//获取路径参数
function getPathIdFromUrl() {
    const pathParams = window.location.pathname.split('/');
    return pathParams[pathParams.indexOf('ManufacturingExecution') + 1] || null;
}
//console.log(GetprocessTasksId); // 输出路径参数

//反填
function reverseFill() {
    return new Promise((resolve, reject) => {
        // 获取要编辑的ID，可以通过URL参数或者其他方式获取，这里假设通过URL参数获取
        var ProcessTasksId = GetprocessTasksId;
        //console.log(ProcessTasksId);
        // 发送请求获取数据
        if (ProcessTasksId) {
            $.ajax({
                type: "Get",
                url: "/ProcessTasks/ReversedProcessTasks",
                data: {
                    ProcessTasksId: ProcessTasksId,
                    token: localStorage.getItem("token")
                },
                success: (res) => {
                    try {
                        const { data } = JSON.parse(res);
                        //console.log(data);
                        if (data) {
                            // 反填表单的函数
                            fillForm(data);
                            //渲染表格的函数
                            resolve(data);
                        } else {
                            layui.layer.msg(res.message, { icon: 2 });// 弹出错误信息
                            reject(res.message);// 抛出错误
                        }
                    } catch (e) {
                        console.error(e);
                        layui.layer.msg('数据解析失败，请稍后重试', { icon: 2 });
                        reject('数据解析失败');
                    }
                },
                error: (err) => {
                    console.error(err);
                    layui.layer.msg('网络错误，请稍后重试', { icon: 2 });
                    reject('网络错误');
                }
            });
        } else {
            reject('未获取到有效的工序任务ID');
        }
    });
}

//反填信息
function fillForm(data) {

    //成品信息
    $('#TaskNumber').val(data.taskNumber);
    $('#TaskStatus').val(data.taskStatus);
    $('#Priority').val(data.priority);
    $('#ProductionBatch').val(data.productionBatch);
    $('#ProcessName').val(data.processName);
    $('#ProductNumber').val(data.productNumber);
    $("#VendorNo").val("规格一");
    $("#VendorName").val("尺寸一");
    $("#VendorContact").val("单位");
}

//领料信息
function ShowMaterialRequisitionInformation() {
    layui.use(function () {

        var table = layui.table;

        //执行渲染
        table.render({
            elem: '#MaterialRequisitionInformationTable',
            page: {
                limit: 15, //每页显示的条数
                limits: [15, 20, 25, 30] //每页显示条数的选择项
            },
            cols: [[
                { field: 'taskNumber', title: '序号', width: 130 },
                { field: 'taskNumber', title: '原料编号', width: 130 },
                { field: 'taskStatus', title: '原料名称', width: 130 },
                { field: 'priority', title: '单位', width: 130 },
                { field: 'productionBatch', title: '规格型号', width: 130 },
                { field: 'processName', title: '尺寸', width: 130 },
                { field: 'productNumber', title: '需求数量', width: 130 },
                { field: 'createdBy', title: '缺料量', width: 130 },
                { field: 'createdDate', title: '已领料数量', width: 160 },
                { field: 'createdDate', title: '退料数量', width: 160 },
                { field: 'createdDate', title: '实际领料数量', width: 160 },
            ]],
            //数据接口
            data: []
        });
        //请求数据
        $.ajax({
            url: '../ProcessTasks/GetProcessTasksList',
            type: "get",
            data: {
                PageIndex: 1,
                PageSize: 15,
            },
            success: function (data) {
                data = JSON.parse(data);
                console.log(data);
                table.reload('MaterialRequisitionInformationTable', {
                    pagge: {
                        limit: 15,
                        limits: [15, 20, 25, 30]
                    },
                    data: data.data.list
                });
            },
            error: function () {
                console.log("请求失败");
            }

        });
    });
}

//报工记录
function ShowReporting() {
    layui.use(function () {

        var table = layui.table;

        //执行渲染
        table.render({
            elem: '#ReportingTable',
            page: {
                limit: 15, //每页显示的条数
                limits: [15, 20, 25, 30] //每页显示条数的选择项
            },
            cols: [[
                { field: 'taskNumber', title: '序号', width: 130 },
                { field: 'taskNumber', title: '报工数量', width: 130 },
                { field: 'taskStatus', title: '设备名称', width: 130 },
                { field: 'priority', title: '设备编号', width: 130 },
                { field: 'productionBatch', title: '操作人', width: 130 },
                { field: 'processName', title: '备注', width: 130 },
            ]],
            //数据接口
            data: []
        });
        //请求数据
        $.ajax({
            url: '../ProcessTasks/GetProcessTasksList',
            type: "get",
            data: {
                PageIndex: 1,
                PageSize: 15,
            },
            success: function (data) {
                data = JSON.parse(data);
                console.log(data);
                table.reload('ReportingTable', {
                    pagge: {
                        limit: 15,
                        limits: [15, 20, 25, 30]
                    },
                    data: data.data.list
                });
            },
            error: function () {
                console.log("请求失败");
            }

        });
    });
}

//质检记录
function ShowQualityInspectionRecords() {
    layui.use(function () {

        var table = layui.table;

        //执行渲染
        table.render({
            elem: '#QualityInspectionRecordsTable',
            page: {
                limit: 15, //每页显示的条数
                limits: [15, 20, 25, 30] //每页显示条数的选择项
            },
            cols: [[
                { field: 'taskNumber', title: '序号', width: 130 },
                { field: 'taskNumber', title: '质检编号', width: 130 },
                { field: 'taskStatus', title: '质检状态', width: 130 },
                { field: 'priority', title: '报工数量', width: 130 },
                { field: 'productionBatch', title: '合格量', width: 130 },
                { field: 'processName', title: '不合格量', width: 130 },
                { field: 'productNumber', title: '质检报告', width: 130 },
                { field: 'createdBy', title: '创建时间', width: 130 },
                { field: 'createdDate', title: '创建人', width: 160 },
                { field: 'createdDate', title: '质检完成时间', width: 160 },
            ]],
            //数据接口
            data: []
        });
        //请求数据
        $.ajax({
            url: '../ProcessTasks/GetProcessTasksList',
            type: "get",
            data: {
                PageIndex: 1,
                PageSize: 15,
            },
            success: function (data) {
                data = JSON.parse(data);
                console.log(data);
                table.reload('QualityInspectionRecordsTable', {
                    pagge: {
                        limit: 15,
                        limits: [15, 20, 25, 30]
                    },
                    data: data.data.list
                });
            },
            error: function () {
                console.log("请求失败");
            }

        });
    });
}

//原料调拨
function ShowRawMaterialAllocation() {
    layui.use(function () {

        var table = layui.table;

        //执行渲染
        table.render({
            elem: '#RawMaterialAllocationTable',
            page: {
                limit: 15, //每页显示的条数
                limits: [15, 20, 25, 30] //每页显示条数的选择项
            },
            cols: [[
                { field: 'taskNumber', title: '序号', width: 130 },
                { field: 'taskNumber', title: '原料编号', width: 130 },
                { field: 'taskStatus', title: '原料名称', width: 130 },
                { field: 'priority', title: '单位', width: 130 },
                { field: 'productionBatch', title: '规格型号', width: 130 },
                { field: 'processName', title: '尺寸', width: 130 },
                { field: 'productNumber', title: '需求数量', width: 130 },
                { field: 'createdBy', title: '缺料量', width: 130 },
                { field: 'createdDate', title: '已领料数量', width: 160 },
                { field: 'createdDate', title: '退料数量', width: 160 },
                { field: 'createdDate', title: '实际领料数量', width: 160 },
            ]],
            //数据接口
            data: []
        });
        //请求数据
        $.ajax({
            url: '../ProcessTasks/GetProcessTasksList',
            type: "get",
            data: {
                PageIndex: 1,
                PageSize: 15,
            },
            success: function (data) {
                data = JSON.parse(data);
                console.log(data);
                table.reload('RawMaterialAllocationTable', {
                    pagge: {
                        limit: 15,
                        limits: [15, 20, 25, 30]
                    },
                    data: data.data.list
                });
            },
            error: function () {
                console.log("请求失败");
            }

        });
    });
}

//按钮
document.addEventListener("placeholderButton", function () {
    // 假设 processTasksId 是通过某种方式（如 URL 参数）传递到页面的
    // 这里我们假设它已经在某个全局变量或 DOM 元素中
    var processTasksId = GetprocessTasksId /* 获取你的 processTasksId */;
    var token = localStorage.getItem("token");
    // 发送Ajax请求获取任务状态
    function fetchTaskStatus(processTasksId) {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", "/ProcessTasks/ReversedProcessTasks?ProcessTasksId=" + processTasksId + "&token=" + token, true);
        xhr.onreadystatechange = function () {
            if (xhr.taskStatus == 4 && xhr.taskStatus == 200) {
                var status = JSON.parse(xhr.responseText).taskStatus;
                updateButtons(status);
            }
        };
        xhr.send();
    }

    // 根据状态更新按钮
    function updateButtons(status) {
        var buttonContainer = document.getElementById('taskButtons');
        buttonContainer.innerHTML = ''; // 清空容器

        var buttons = [];

        if (status === '未开始' || status === '进行中') {
            buttons.push({
                label: '取消',
                icon: 'layui-icon-add-circle-fine',
                onclick: function () { location.href = '/ProcessTasks/ManufacturingExecution'; }
            });

            if (status === '进行中') {
                buttons.push({
                    label: '报工',
                    className: 'layui-bg-blue',
                    onclick: function () { StartProcess(); }
                });

                buttons.push({
                    label: '完工',
                    className: 'layui-btn-disabled', // 禁用状态
                    onclick: null // 不设置点击事件
                });
            } else {
                buttons.push({
                    label: '开工',
                    className: 'layui-bg-blue',
                    onclick: function () { StartProcess(); }
                });
            }
        } else if (status === '已完成') {
            // 根据需要添加其他状态的处理
            buttons.push({
                label: '状态：已完成',
                className: 'layui-btn-disabled',
                onclick: null
            });
        }

        // 创建按钮并添加到容器中
        buttons.forEach(function (button) {
            var newButton = document.createElement('button');
            newButton.type = 'button';
            newButton.className = 'layui-btn ' + (button.className || '');
            if (button.icon) {
                newButton.innerHTML = '<i class="' + button.icon + '"></i> ' + button.label;
            } else {
                newButton.innerHTML = button.label;
            }
            if (button.onclick) {
                newButton.onclick = button.onclick;
            } else {
                newButton.onclick = null; // 禁用点击
            }
            buttonContainer.appendChild(newButton);
        });
    }

    // 调用函数获取状态并更新按钮
    fetchTaskStatus(processTasksId);
});


//开工
function StartProcess() {
    // 发送请求
    layer.confirm('确认开工吗？', {
        btn: ['确认', '取消'] //按钮
    }, function () {
        $.ajax({
            type: "Post",
            url: "/ProcessTasks/UpdateProcessTasksStatus",
            data: {
                processTasksId: GetprocessTasksId,
                taskStatus: "进行中",
                token: localStorage.getItem("token")
            },
            success: function (data) {
                data = JSON.parse(data);
                if (data.code === 1) {
                    layer.msg("开工成功", { icon: 1 });
                    setTimeout(function () {
                        //跳转到列表页
                        location.href = '/ProcessTasks/ShowProcessTasks'
                    }, 2000);
                } else {
                    layer.msg("开工失败", { icon: 2 });
                }
            },
            error: (err) => {
                console.error(err);
                layui.layer.msg('网络错误，请稍后重试', { icon: 2 });
            }
        });
    }, function () {
        layer.msg('已取消', {
            time: 2000, //2s后自动关闭
            btn: ['知道了']
        });
    });
}

var productId = "CP712049";
var productName = "保险杠";
var productSpec = "规格一";
var unit = "个";
var productionPlan = 10;

//班组下拉框
function selectTeamsAndGroups() {
    var layer = layui.layer;
    var form = layui.form;
    //加载仓库下拉框
    $.ajax({
        url: "/WWHours/GetWorkerList",
        type: "get",
        headers: {
            "Authorization": localStorage.getItem("token")
        },
        data: {
            PageIndex: 1,
            PageSize: 15,
        },
        //dataType: 'json', // 如果服务器返回的是 JSON 字符串，请移除这一行；如果返回的是 JSON 对象，请保留
        success: function (response) {
            // 如果服务器已经返回了 JSON 对象，则不需要再次解析
            var data = JSON.parse(response); // 请移除这一行，如果 response 已经是 JSON 对象
            //console.log(data.data.list);

            var options = '<option value="">请选择</option>'; // 添加默认选项
            $.each(data.data.list, function (index, item) {
                // 使用正确的参数：index（索引）和 item（当前元素）
                options += '<option value="' + item.workerListId + '">' + item.teamsAndGroups + '</option>';
            });

            $("#WorkerListId").html(options); // 设置下拉框的选项
            form.render(); // 重新渲染下拉框（确保 layui.form 已经被正确加载）
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log("获取数据失败: " + textStatus, errorThrown);
            // 可以考虑显示一个错误消息给用户，例如使用 layui 的 layer 模块
            // layer.msg('获取仓库列表失败，请稍后再试'); // 确保 layer 已经被加载和初始化
        }
    });
}

//获取时间
function gettime() {
    // 获取当前日期时间
    var now = new Date();
    var year = now.getFullYear();
    var month = ("0" + (now.getMonth() + 1)).slice(-2);
    var day = ("0" + now.getDate()).slice(-2);
    var hours = ("0" + now.getHours()).slice(-2);
    var minutes = ("0" + now.getMinutes()).slice(-2);
    //var seconds = ("0" + now.getSeconds()).slice(-2);
    var serialNumber = "KW" + year + month + day + hours + minutes;
}

//报工
window.Reporting = function Reporting() {
    layui.use(['layer', 'form'], function () {
        var layer = layui.layer;
        var $ = layui.jquery;
        var form = layui.form;

        layer.open({
            type: 1,
            title: '报工',
            shadeClose: true,
            shade: 0.8,
            area: ['800px', '500px'],
            maxmin: true, // 允许全屏最小化
            anim: 0, // 0-6 的动画形式，-1 不开启
            content: `
            <div style="margin-left:25px">
                <p>成品编号:  CP712049  </p>
                <p>成品名称:  保险杠  </p>
                <p>成品规格:  规格一  </p>
                <p>单位:   个  </p>
                <p>计划产量:   10 </p>
                </div>
            <form class="layui-form" action="" onsubmit="return false">
                <div class="layui-form-item">
                    <label class="layui-form-label">报工数量</label>
                    <div class="layui-input-inline">
                        <input type="text" id="ReportingNum" name="ReportingNum" required lay-verify="required" placeholder="请输入报工数量" autocomplete="off" style="width:300px" class="layui-input">
                    </div>
                </div>

                <div class="layui-form-item">
                    <label class="layui-form-label">设备</label>
                    <div class="layui-input-block">
                        <input type="text" id="EquipmentName" name="EquipmentName" required lay-verify="required" placeholder="请输入设备名称" autocomplete="off" style="width:300px" class="layui-input">
                    </div>
                </div>

                <div class="layui-form-item">
                    <label class="layui-form-label">工位</label>
                    <div class="layui-input-block">
                        <select id="Station" name="Station" style="width:300px">
                            <option value="">请选择工位</option>
                            <option value="测试1">测试</option>
                            <option value="工位一">工位一</option>
                            <option value="工位二">工位二</option>
                            <option value="工位三">工位三</option>
                            <option value="工位四">工位四</option>
                            <option value="工位五">工位五</option>
                            <option value="工位六">工位六</option>
                            <option value="工位七">工位七</option>
                        </select>
                    </div>
                </div>

                <div class="layui-form-item">
                    <label class="layui-form-label">班组</label>
                    <div class="layui-input-block">
                       <select id="WorkerListId" name="TeamsAndGroups" lay-filter="cangku">
 
                        </select>
                    </div>
                </div>

                <div class="layui-form-item">
                    <div class="layui-input-block" style="text-align:right">
                        <button type="reset" class="layui-btn layui-btn-primary">取消</button>
                        <button class="layui-btn layui-bg-blue" lay-filter="formDemo">确认报工</button>
                    </div>
                </div>
            </form>`,
            success: function (layero, index) {
                // 确保DOM元素已完全加载后渲染表单
                setTimeout(function () {
                    selectTeamsAndGroups()
                    gettime()
                    form.render();///确保表单元素正确渲染
                }, 300); // 使用 setTimeout 延迟渲染，确保DOM完全加载

                // 监听提交
                form.on('submit(formDemo)', function (data) {
                    var field = data.field;
                    var objTwo = {
                        ReportingNum: field.ReportingNum,
                        EquipmentName: field.EquipmentName,
                        Station: field.Station,
                        TeamsAndGroups: field.TeamsAndGroups,
                        ProcessTasksId: GetprocessTasksId,
                    };
                    console.log(objTwo);
                    $.ajax({
                        url: '../ProcessTasks/AddReportingInfo',
                        type: "Post",
                        headers: {
                            "Authorization": localStorage.getItem("token")
                        },
                        data: {
                            dto: objTwo,
                        },
                        success: function (res) {
                            var res = JSON.parse(res);
                            console.log(res);
                            if (res.code === 1) {
                                layer.alert("添加成功", { icon: 1 });
                                //setTimeout(function () {
                                //    //跳转到列表页
                                //    location.href = '/ProcessTasks/ShowProcessTasks'
                                //}, 2000);
                            } else {
                                layer.alert("添加失败", { icon: 2 });
                            }
                        }
                    });
                });
                // 添加取消按钮功能
                $(layero).find('.layui-btn-primary').on('click', function () {
                    layer.close(index);
                });
            }
        });
    });
}


//调拨列表展示
function ShwoAllocate() {
    layui.use(function () {
        var table = layui.table;
        var AllocateNumber = $("#AllocateNumber").val();
        var AllocateDate = $("#AllocateDate").val();
        var AllocateStatus = $("#AllocateStatus").val();

        // 点击导出按钮
        document.getElementById('exportBtn').addEventListener('click', function () {
            var checkStatus = table.checkStatus('AllocateTable');  // 获取当前表格的选中状态
            var selectedData = checkStatus.data;  // 获取选中的数据
            if (selectedData.length === 0) {
                alert('请先选择要导出的数据!');
                return;
            }
            var filteredData = selectedData.map(function (item) {
                // 创建一个新对象，只包含您想要的属性
                return {
                    '调拨编号': item.allocateNumber,
                    '调拨日期': item.allocateDate,
                    '仓库编码': item.warehouseNo,
                    '原料编码': item.ingredientnumber,
                    '原料名称': item.ingredientName,
                    '原料批次号': item.ingredientBatchNum,
                    '调拨数量': item.allocateNum,
                    '调拨人': item.allocatePerson,
                    '状态': item.allocateStatus,
                };
            });
            console.log(filteredData);

            // 使用 XLSX 导出选中的数据
            var wb = XLSX.utils.book_new();
            var ws = XLSX.utils.json_to_sheet(filteredData); // 将选中的数据转换为工作表
            XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');

            // 导出为 Excel 文件
            XLSX.writeFile(wb, '调拨列表.xlsx');
        });

        //执行渲染
        table.render({
            elem: '#AllocateTable',
            page: {
                limit: 15, //每页显示的条数
                limits: [15, 20, 25, 30] //每页显示条数的选择项
            },
            cols: [[
                { type: 'checkbox', fixed: 'left' },
                { field: 'allocateNumber', title: '调拨编号', width: 130 },
                { field: 'allocateDate', title: '调拨日期', width: 130 },
                { field: 'warehouseNo', title: '仓库编码', width: 130 },
                { field: 'ingredientnumber', title: '原料编码', width: 130 },
                { field: 'ingredientName', title: '原料名称', width: 130 },
                { field: 'ingredientBatchNum', title: '原料批次号', width: 130 },
                { field: 'allocateNum', title: '调拨数量', width: 130 },
                { field: 'allocatePerson', title: '调拨人', width: 130 },
                {
                    field: 'allocateStatus', title: '状态', width: 130,
                    templet: function (d) {
                        // 根据状态返回不同颜色的字体
                        var statusColor = '';
                        switch (d.allocateStatus) {
                            case '待审核':
                                statusColor = 'style="color: #ffb800;"';
                                break;
                            case '审核中':
                                statusColor = 'style="color: #31bdec;"';
                                break;
                            case '已通过':
                                statusColor = 'style="color: #16b777;"';
                                break;
                            case '已驳回':
                                statusColor = 'style="color: #ff5722;"';
                                break;
                            default:
                                // 如果状态不是上述任何一个，可以使用默认颜色或不做特殊处理
                                statusColor = '';
                        }
                        // 返回带有样式的状态文本
                        return '<span ' + statusColor + '>' + d.allocateStatus + '</span>';
                    }
                },
                {
                    field: '', title: '操作', width: 240, templet: function (d) {

                        return '<a class="layui-btn layui-bg-blue layui-btn-xs" onclick="EditWWHours(' + d.allocateId + ')">审核</a>' +
                            '<a class="layui-btn layui-bg-blue layui-btn-xs" onclick="CheckInfo(' + d.allocateId + ')">查看</a>' +
                            '<a class="layui-btn layui-bg-blue layui-btn-xs" onclick="EditWWHours(' + d.allocateId + ')">编辑</a>' +
                            '<a class="layui-btn layui-bg-red layui-btn-xs" layui-bg-red onclick="DeleteWWHours(' + d.allocateId + ')">删除</a>';
                    },
                }
            ]],
            //数据接口
            data: []
        });
        //请求数据
        $.ajax({
            url: '../Allocate/GetAllocateList',
            type: "get",
            headers: {
                "Authorization": localStorage.getItem("token")
            },
            data: {
                PageIndex: 1,
                PageSize: 15,
                AllocateNumber: AllocateNumber,
                AllocateDate: AllocateDate,
                AllocateStatus: AllocateStatus
            },
            success: function (data) {
                data = JSON.parse(data);
                console.log(data);
                table.reload('AllocateTable', {
                    pagge: {
                        limit: 15,
                        limits: [15, 20, 25, 30]
                    },
                    data: data.data.list
                });
            },
            error: function () {
                console.log("请求失败");
            }

        });
    })
}

